home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1833 / 1833.xpi / chrome / yoono.jar / content / yoono / random.js < prev    next >
Text File  |  2009-12-16  |  6KB  |  136 lines

  1. // fetch a surprise URL
  2. var yoonoRandomGlob = new Object();
  3. var win = yoonoGlob.WMED.getMostRecentWindow("navigator:browser");
  4. yoonoRandomGlob.browser = win.getBrowser().mCurrentBrowser;
  5.  
  6. Components.utils.import("resource://yoono/yoonoService.js");
  7. Components.utils.import("resource://yoono/yoonoBkmSync.js");
  8. Components.utils.import("resource://yoono/yoonoLog.js");
  9.  
  10. const YNPREFBRANCH = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.yoono.");
  11.  
  12. yoonoRandomGlob.init = function() {
  13.   try { 
  14.     var id = '';
  15.     try {
  16.       id = YNPREFBRANCH.getCharPref('randomfolderid');
  17.     } catch(e) {
  18.     }
  19.     
  20.     YNPREFBRANCH.setCharPref('randomfolderid', '');
  21.     if(id != '') {
  22.       YOONO_LOG.debug("Surprise from folder");
  23.       yoonoRandomGlob.urlList = YOONO_BKM.getNodeListUrl(id);
  24.     } else {
  25.       YOONO_LOG.debug("Surprise from all bkms");
  26.       yoonoRandomGlob.urlList = YOONO_BKM.getFullListUrl();
  27.     }
  28.     
  29.     // display waiting message
  30.     win.messageinfos.init('searching', win.yoonoGlob.gStrbundle.getString("random.searching"));
  31.     // Get full bookmark list from bookmarks in order to check if random url is in bookmarks
  32.     // (if it is, we'll take another one)
  33.     // Absolute max number of requests to obtain random urls
  34.     yoonoRandomGlob.maxRetry = 10;
  35.     // try to read the maxRetry from prefs (it was given by the server at connect time and saved in prefs)
  36.     try {
  37.       yoonoRandomGlob.maxRetry = YNPREFBRANCH.getIntPref('surprise-me.max-retry');
  38.     } catch(e) {} // in case not in prefs...
  39.     if(yoonoRandomGlob.maxRetry > 10) yoonoRandomGlob.maxRetry = 10;
  40.  
  41.     // current retry
  42.     yoonoRandomGlob.current = 0;
  43.     // Hash table to easily find urls that are in bookmarks already
  44.     yoonoRandomGlob.urlTable = {};
  45.     for (var i = yoonoRandomGlob.urlList.length ; i-- > 0; ) {
  46.       yoonoRandomGlob.urlTable[yoonoRandomGlob.urlList[i]] = 1;
  47.     }
  48.     // default server url
  49.     yoonoRandomGlob.serverUrl = YNPREFBRANCH.getCharPref('serverurl') + 'linkserver';
  50.     // Try getting server url from prefs, was given at connect time
  51.     try {
  52.       yoonoRandomGlob.serverUrl = YNPREFBRANCH.getCharPref('reco-service.url');
  53.     } catch(e) {} // in case not in prefs...
  54.  
  55.     yoonoRandomGlob.getRandomSuggestions();
  56.   } catch(e) {
  57.     YOONO_LOG.exception(e);
  58.   }
  59. }
  60. // Ask for suggestions from a random bookmark
  61. yoonoRandomGlob.getRandomSuggestions = function() {
  62.   try {
  63.     // Get a random offset in the list of bookmarks
  64.     yoonoRandomGlob.randomOffset = Math.floor(Math.random() * yoonoRandomGlob.urlList.length);
  65.     // Get the random bookmark. We'll use it to ask suggestions to the server
  66.     yoonoRandomGlob.browser.ynSuggestUrlFrom = yoonoRandomGlob.urlList[yoonoRandomGlob.randomOffset];
  67.     // If we must try again, we don't want to try this bookmark again. Remove it
  68.     yoonoRandomGlob.urlList.splice(yoonoRandomGlob.randomOffset, 1);
  69.     // count one try
  70.     yoonoRandomGlob.current ++ ;
  71.     var script = <server-script version="1.0"/>;
  72.     script.appendChild( <compute-recommended-links url={yoonoRandomGlob.browser.ynSuggestUrlFrom} ranking="SURPRISEME"/>);
  73.     YOONO_CMPT.sendRequest(yoonoRandomGlob.serverUrl, 'POST', 'async', script, yoonoRandomGlob.handleRandomSuggestions);
  74.   } catch(e) {
  75.     YOONO_LOG.exception(e);
  76.   }
  77. }
  78.  
  79. // Handler for server responses to suggestions from a random bookmark
  80. yoonoRandomGlob.handleRandomSuggestions = function(request, result) {
  81.   try {
  82.     var suggestUrl = '';
  83.     if(result) {
  84.       var suggestions = result['import-links'].link;
  85.       // Get rid of suggestions that already are in our bookmarks or history
  86.       var cleansuggestions = yoonoRandomGlob.ynCleanSuggestions (suggestions);
  87.       // If some suggestions remain, pick up one at random
  88.       if (cleansuggestions.length) {
  89.         var link = cleansuggestions[(Math.floor(Math.random() * cleansuggestions.length))];
  90.         //var link = cleansuggestions[0];
  91.  
  92.         suggestUrl = link.@url.toString();
  93.       }
  94.     }
  95.     // Nothing is left, or bad answer : ask the server again (with another bookmark)
  96.     // if we haven't tried all the bookmarks yet, and did not reach max retries
  97.     if('' == suggestUrl) {
  98.       if(yoonoRandomGlob.urlList.length && (yoonoRandomGlob.current < yoonoRandomGlob.maxRetry)) {
  99.         yoonoRandomGlob.getRandomSuggestions();
  100.       } else {
  101.         // display no surprise found message
  102.         win.messageinfos.init('randomfailed', win.yoonoGlob.gStrbundle.getString("random.failed"));
  103.         // stat
  104.         YOONO_CMPT.addStat(['nosurprise']);
  105.       }
  106.     } else {
  107.       // keep track for message display
  108.       yoonoRandomGlob.browser.ynSuggestUrl = suggestUrl
  109.       win.messageinfos.init('random', win.yoonoGlob.gStrbundle.getString("random.messageinfos"), yoonoRandomGlob.browser.ynSuggestUrlFrom);
  110.       document.location = suggestUrl;
  111.     }
  112.  
  113.   } catch(e) {
  114.     YOONO_LOG.exception(e);
  115.   }
  116. }
  117.  
  118.  
  119. // Nettoyage des suggestions : 
  120. // On supprime des suggestions retourn├⌐es par le serveur toutes celles figurant deja dans les
  121. // bookmarks
  122. yoonoRandomGlob.ynCleanSuggestions = function(suggestions) {
  123.   var tmpurlList = [];
  124.  
  125.   // history urls must be refreshed each time
  126.   var url = '';
  127.   // delete knowurls (found in bkms or history)
  128.   for each (var link in suggestions) {
  129.     url = link.@url.toString();
  130.     if (!yoonoRandomGlob.urlTable[url]) {
  131.       tmpurlList.push(link);
  132.     } 
  133.   }
  134.   return tmpurlList;
  135. }
  136.